# 从 flask 导入 request、jsonify 和 Blueprint
# request 用于处理 HTTP 请求，获取请求中的数据
# jsonify 用于将 Python 数据结构转换为 JSON 格式的响应
# Blueprint 用于创建 Flask 应用的蓝图，将相关的路由组织在一起
from flask import request, jsonify, Blueprint
# 从 app 导入 LogService，用于记录系统日志
from app import LogService
# 从 app.models 导入 Station 模型，用于与数据库中的站点表进行交互
from app.models import Station
# 从 presenter 导入 StationPresenter，用于将 Station 模型对象转换为适合展示的数据格式
from presenter import StationPresenter
# 从 utils 导入 create_response 和 StateCode
# create_response 用于创建统一格式的响应数据
# StateCode 包含各种状态码，用于表示不同的响应状态
from utils import create_response, StateCode

# 创建一个名为 'stations' 的蓝图，用于管理站点相关的路由
station_bp = Blueprint('stations', __name__)

@station_bp.route('/stations', methods=['POST'])
def createStation():
    """
    创建新站点的路由处理函数。

    该函数接收一个 POST 请求，请求中应包含站点的相关数据。
    从请求中获取 JSON 数据，使用该数据创建一个新的 Station 对象，
    将新站点对象转换为适合展示的字典格式，记录日志，
    最后返回包含成功状态码和站点数据的 JSON 响应。

    Returns:
        tuple: 包含 JSON 响应和 HTTP 状态码 200 的元组。
    """
    # 从请求中获取 JSON 数据
    data = request.json
    # 使用请求数据创建一个新的 Station 对象
    new_station = Station.create(data=data)
    # 使用 StationPresenter 将新站点对象转换为适合展示的字典格式
    station_presenter = StationPresenter(new_station).as_dict()
    # 记录日志
    LogService.log()
    # 返回包含成功状态码和站点数据的 JSON 响应，状态码为 200
    return jsonify(create_response(StateCode.SUCCESS, data=station_presenter)), 200

@station_bp.route('/stations/quantity_create', methods=['POST'])
def quantityCreate():
    """
    批量创建站点的路由处理函数。

    该函数接收一个 POST 请求，请求中应包含一个站点名称列表。
    从请求中获取站点名称列表，遍历该列表，为每个站点名称创建一个新的 Station 对象，
    记录日志，最后返回包含成功状态码的 JSON 响应。

    Returns:
        tuple: 包含 JSON 响应和 HTTP 状态码 200 的元组。
    """
    # 从请求的 JSON 数据中获取站点名称列表
    stations = request.json.get("stations")
    # 遍历站点名称列表
    for name in stations:
        # 为每个站点名称创建一个包含名称的字典
        station_hash = {"name": name}
        # 使用该字典创建一个新的 Station 对象
        Station.create(station_hash)
    # 记录日志
    LogService.log()
    # 返回包含成功状态码的 JSON 响应，状态码为 200
    return jsonify(create_response(StateCode.SUCCESS)), 200